สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Tutorial DATA STRUCTURE

01 1การเรียงลำดับ(Sorting) 01 2 การเรียงลำดับ2 01 Sorting1 01 Sorting2 02 ArrayList 02 อาร์เรย์ลิสต์ (Array List) 03 LinkedList 03 ลิงค์ลิสต์ (Linked List) 04 Stack 04 สแต๊ค 05 1 คิวและไพออริตี้คิว 05 2 คิวและไพออริตี้คิว 05 Queue and PriorityQueue1 05 Queue and PriorityQueue2 06 1 BinaryTree 06 1 ไบนารีทรี 06 2 BinarySearchTree 06 2 ไบนารีเสิร์ชทรี 06 3 BinarySearchTree 06 3 ไบนารีเสิร์ชทรี 08 Hash 08 แฮช 09 Graph 09 กราฟ

อาร์เรย์ลิสต์ (Array List)

Array collection

            Collection เป็นที่สำหรับการเก็บข้อมูล โดยทำหน้าที่สำหรับการเก็บเพิ่ม ลบ และการค้นหาข้อมูล และยังสามารถเก็บข้อมูลอะไรก็ได้ซ้ำกันก็ได้ ส่วนอาร์เรย์ (array) เป็นแถวลำดับ คือเป็นการเก็บข้อมูลใส่ไว้เป็นช่องๆ เริ่มตั้งแต่ช่องแรก ดัชนี (index) แรกเริ่มที่ช่องที่0 ไปถึงช่องของขนาดลบด้วยหนึ่ง (size-1) ลบหนึ่งก็เพราะ สมมติว่าเรากำหนดขนาดอาร์เรย์เป็น 10 แต่มันต้องเริ่มต้นดัชนีที่ชอง 0 เพื่อจะให้ได้ 10 ช่องก็ต้องเป็น 0-9 ดังนั้นแล้ว array collection ก็คือที่เก็บข้อมูลโดยเป็นแถวลำดับ

List

            List เป็นรายการ เป็นลักษณะของการเก็บข้อมูลที่มีตัวเลขกำกับข้อมูล ทำให้ข้อมูลมีความเป็นลำดับ มีข้อมูลที่อยู่ก่อนหรืออยู่ข้างหลัง เพราะฉะนั้นเมื่อพูดถึง list จึงต้องมีเมท็อดที่เกี่ยวกับเรื่องของลำดับได้แก่ get และ set โดยเป็นการขอข้อมูลที่อยู่ในลำดับที่ต้องการ และการเปลี่ยนแปรงข้อมูลที่อยู่ในลำดับที่ต้องการ

Arraylist

          เป็น array บวกกับ list หรือก็คือเป็นการเก็บข้อมูลเป็นแถวๆแต่เป็นลำดับแบบชัดเจนมีความหมาย มีเลขกำกับ ไม่ใช่แค่เพิ่ม ลบ หา นอกจากนี้อาร์เรย์ลิสต์เป็นที่รู้จักกันว่าเป็นอาร์เรย์ที่ขยายขนาดเองได้

เมท็อดในอาร์เรย์ลิสต์

void add           สำหรับเพิ่มข้อมูล

void remove     สำหรับลบข้อมูล

ชนิดข้อมูล get   สำหรับขอข้อมูลในลำดับเลขที่ต้องการ

void set            สำหรับเปลี่ยนข้อมูลในลำดับที่ต้องการ

ชนิดตัวแปร size

indexOf

void ensureCapacity

boolean equal

 

รูป 2-1

สร้างคลาส ArrayList

            สร้างตัวแปรให้กับคลาสเป็น private 2 ตัวได้แก่ data และ size โดย data มีไว้สำหรับเก็บข้อมูลตรง Object[] เป็นชนิดของข้อมูลที่เก็บจะเก็บเป็น int เป็นอะไรก็ได้ และตัวแปร size ไว้สำหรับกำหนดขนาดให้กับอาร์เรย์จึงเป็น int

            ในคอนสตรัคเตอร์ของคลาส กำหนดค่าเริ่มต้นให้ data เก็บข้อมูล 1 ตัว คือแค่ 1 ตัวก็พอเพราะว่าอาร์เรย์ลิสต์เป็นอาร์เรย์ที่ขยายขนาดได้ด้วยตัวเอง พอมีข้อมูลตัวถัดไปเข้ามา อาร์เรย์จะขยายขนาดเองไม่ต้องกำหนดพื้นที่ให้เปลือง ตัวแปร size สำหรับเก็บขนาดของอาร์เรย์กำหนดค่าเริ่มต้นเป็น 0

 

รูป2-2

เมท็อด add ensureCapacity

บรรทัดที่ 39 : สร้าง เมท็อด add รับพารามิเตอร์เป็นชนิดข้อมูลที่จะใส่ข้อมูลเข้ามา

บรรทัดที่ 41 : หากไม่ต้องการให้อาร์เรย์เก็บค่า null ให้ throw exception ออกไป

บรรทัดที่ 42 : สำหรับตรวจสอบขนาดของอาร์เรย์ ด้วยเมท็อด ensureCapacity โดยส่งพารามิเตอร์เป็นขนาด size + 1

บรรทัดที่ 43 : เอา e ใส่เข้าไปที่ตัวสุดท้าย ที่ใส่ที่ตัวสุดท้ายเพราะอาร์เรย์ลิสต์เป็นการเก็บข้อมูลที่ต่อท้ายจากข้อมูลเดิมไปเรื่อยๆ

เมท็อด ensureCapacity

บรรทัดที่ 46 : สร้าง เมท็อด ensureCapacity รับอินพุทเป็นขนาดอาร์เรย์เดิม

บรรทัดที่ 48 : ตรวจว่าเลขที่รับเข้ามามากกว่าจำนวนข้อมูลที่มีอยู่หรือไม่ ถ้าใช่ให้ขยายขนาดอาร์เรย์ คือ capacity เป็น size+1 ก็หมายความว่า ถ้า size มีข้อมูลเต็มทุกช่อง ก็มี data.length จะเท่ากับ size ดังนั้นพอ +1 เข้าไป capacity จะมากกว่า data.length อยู่ 1 ก็หมายความว่าหากข้อมูลเต็มอาร์เรย์ให้เพิ่มขนาดของอาร์เรย์ออกไป

บรรทัดที่ 49 : เพิ่มขนาดโดยให้เอาจำนวนข้อมูลทั้งหมดไปคูณ2 เป็นขนาดของอาร์เรย์ใหม่ เก็บไว้ในตัวแปร s

บรรทัดที่ 50 : สร้างอาร์เรย์ใหม่ขนาด s

บรรทัดที่ 51-52 : วนลูปเอาสิ่งที่อยู่ในอาร์เรย์เดิมไปใส่อาร์เรย์ใหม่

บรรทัดที่ 53 : ให้ data ชี้ข้อมูลเดียวกับที่ arr(อาร์เรย์ใหม่) ชี้อยู่

 

เมท็อด indexOf(ชนิดตัวแปร ชื่อตัวแปร) สำหรับการหาตำแหน่งของข้อมูล

            วนลูปจากตัวแรกถึงตัวสุดท้ายดูว่ามี data ช่องที่ i มีค่าเท่ากับข้อมูลที่รับเข้ามาหรือไม่ ถ้าใช่ให้คืนตำแหน่ง i ออกไปเลย แต่ถ้าในอาร์เรยไม่มีข้อมูลให้คืนค่าเป็น -1 (เพราะอาร์เรย์เริ่มที่ 0 ก็เอาเลขที่น้อยกว่า 0)

เมท็อด contains(ชนิดตัวแปร ชื่อตัวแปร) สำหรับถามว่ามีข้อมูลนั้นในอาร์เรย์หรือไม่ โดยตอบเป็นใช่และไม่เท่านั้น

            ก็ให้ดูว่าถ้า หาด้วยเมท็อด indexOf แล้วไม่คืนค่าเป็น -1 ก็ถือว่ามี (เพราะ -1 ของเมท็อด indexOf หมายถึงไม่มีตำแหน่งของข้อมูลนั้น)

 

รูป2-4

บรรทัดที่ 57 : สร้างเมท็อด remove(ชนิดตัวแปร ชื่อตัวแปร) สำหรับลบข้อมูลที่รับเข้ามา

บรรทัดที่ 59 : สร้างตัวแปร i หาว่ามีตำแหน่งของข้อมูลที่รับเข้ามาอยู่ที่ตำแหน่งไหน

บรรทัดที่ 60 : เงื่อนไขคือต้องมีข้อมูล ก็เรียกเมท็อดสำหรับลบข้อมูลในตำแหน่งนั้น

บรรทัดที่ 63 : สร้างเมท็อด remove(ชนิดตัวแปร ชื่อตัวแปร) สำหรับลขข้อมูลในตำแหน่งนั้นๆ

บรรทัดที่ 65-67 : วนลูปจาก i+1 ถึงตัวสุดท้าย สำหรับการเลื่อนข้อมูลมาไปข้างซ้ายหนึ่งตำแหน่ง ซึ่งตัวแรกที่จะไปทับข้อมูลเก่าคือ ข้อมูลที่ i+1 ไปทับข้อมูล i ที่เราต้องการลบ

บรรทัดที่ 69 : ให้ข้อมูลช่องสุดท้ายว่าง

 

รูป2-5

บรรทัดที่ 83 : สร้างเมท็อด get รับข้อมูลเป็นดัชนีเข้ามา

บรรทัดที่ 85-87 : หาว่าเลขที่รับเข้ามาเกินขอบเขตของ size หรือไม่ ถ้าเกินให้แจ้งข้อความ error

บรรทัดที่ 89 : ถ้าอยู่ในช่วงให้คืนค่าว่าข้อมูลของดัชนีนั้นคืออะไร (ในโค๊ดให้เก็บข้อมูลเป็นชนิด Object ดังนั้น ต้อง cast ข้อมูลเป็น int ให้เหมือนกับ input)

บรรทัดที่ 92 : สร้างเมท็อด set สำหรับกำหนเข้อมูลในดัชนีนั้นๆ

บรรทัดที่ 93 : ให้ข้อมูล data ช่องที่ i เป็น e



บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

C Article


C++ Article


Java Article


C#.NET Article


VB.NET Article


Python Article


Golang Article


JavaScript Article


Perl Article


Lua Article


Rust Article


Article


Python


Python Numpy


Python Machine Learning



แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา